package com.jf.car.service.impl;



import com.jf.car.bean.Userinfo;
import com.jf.car.dao.UserinfoDao;
import com.jf.car.dao.impl.UserinfoDaoImpl;
import com.jf.car.service.UserinfoService;
import com.jf.car.util.MyConstants;
import com.jf.car.util.MyUtils;
import com.jf.car.util.PageInfo;
import com.jf.car.util.ResultJson;

import java.util.Arrays;
import java.util.List;

public class UserinfoServiceImpl implements UserinfoService {
    private UserinfoDao userinfoDao = new UserinfoDaoImpl();
    @Override
    public Userinfo login(Userinfo userinfo) {
        /*获取数据库中是否存在此用户名*/
        Userinfo loginInfo = userinfoDao.getByUsername(userinfo.getUsername());
        /*如果存在此用户名*/
        if(loginInfo != null){
            /*先转md5密码，再判断密码是否相同*/
            String md5Pwd = MyUtils.MD5(userinfo.getPassword());
            if(loginInfo.getPassword().equals(md5Pwd)){
                /*密码相同,登录成功*/
                return loginInfo;
            }
        }
        return null;
    }

    @Override
    public ResultJson getPage(PageInfo pageInfo, Userinfo userinfo) {
        List<Userinfo> list = userinfoDao.getPage(pageInfo,userinfo);
        int count = userinfoDao.getCount(userinfo);
        pageInfo.setPageData(list,count);
        return ResultJson.success(pageInfo);
    }

    @Override
    public ResultJson saveOrUpdate(Userinfo userinfo) {
        int result;
        if(userinfo.getId() == null){
            /*给一个默认状态码为1*/
            userinfo.setStatus(MyConstants.STATUS_1);
            /*查看数据库中是否有此username*/
            Userinfo searchInfo = userinfoDao.getByUsername(userinfo.getUsername());
            if(searchInfo == null){
                /*给一个默认密码*/
                userinfo.setPassword(MyUtils.MD5(MyConstants.DEFAULT_PASSWORD));
                result = userinfoDao.add(userinfo);
            }else{
                return ResultJson.error("用户名已存在!");
            }
        }
        /*如果id存在,则执行更新数据操作*/
        else{
            if (MyUtils.isStringNotEmpty(userinfo.getPassword())){
                userinfo.setPassword(MyUtils.MD5(userinfo.getPassword()));
            }
            if (userinfo.getStatus() !=null && userinfo.getId()== MyConstants.ADMIN_ID){
                return ResultJson.error("管理员禁止修改状态");
            }
            result = userinfoDao.updateSelect( userinfo);
        }
        /*通过最后result值是否为0来判断操作是否成功*/
        return result>0? ResultJson.success() : ResultJson.error("操作失败！");
    }

    @Override
    public ResultJson delete(int id) {
        if (id == MyConstants.ADMIN_ID){
            return ResultJson.error("管理员禁止删除");
        }
        int result = userinfoDao.delete(id);
        return result>0? ResultJson.success() : ResultJson.error("操作失败！");
    }


    @Override
    public ResultJson checkPassword(Userinfo userinfo) {
        Userinfo searchInfo = userinfoDao.getById(userinfo.getId());
        if(searchInfo != null && searchInfo.getPassword().equals(MyUtils.MD5(userinfo.getPassword()))){
            return ResultJson.success();
        }
        return ResultJson.error("原密码不正确！");
    }

    @Override
    public ResultJson batchDelete(String idsStr) {
        if (MyUtils.isStringEmpty(idsStr)){
            return ResultJson.error("编号异常,无法删除");
        }
        int[] ids = MyUtils.string2IntArray(idsStr);
        /*先排序,再进行二分查找*/
        Arrays.sort(ids);
        int index = Arrays.binarySearch(ids,MyConstants.ADMIN_ID);
        if (index>=0){
            return ResultJson.error("管理员禁止删除");
        }
        int result = userinfoDao.batchDelete(ids);
        return result == ids.length?ResultJson.success():ResultJson.error("删除异常");
    }


    @Override
    public Userinfo getById(int id) {
        return userinfoDao.getById(id);
    }
}
